package br.com.intelsys.iflow;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.jbpm.graph.def.Transition;

import br.com.intelsys.iflow.jbpm.IFlowTransitionJbpm;

/**
 * Instancia de um determinado processo de processo.
 * 
 * Interface generica.
 * 
 * @author Patrick Givisiez
 *
 */
public interface IFlowInstanceGeneric {
	
	/**
	 * Recupera o nome do estado atual.
	 * 
	 * @return Nome do estado
	 */
	public String getStateName();

	/**
	 * Define uma variavel para a instancia do processo.
	 * 
	 * @param name Nome da variavel
	 * @param value Valor da variavel
	 */
	public void setVariable(String name, Object value);

	/**
	 * Recupera uma variavel da instancia do processo.
	 * 
	 * @param name Nome da variavel
	 * @return Valor da variavel
	 */
	public Object getVariable(String name);

	/**
	 * Retorna um mapa com todas as variaveis.
	 * 
	 * @return Mapa com os as variaveis nome=>valor
	 */
	public Map <String, Object> getVariables();
	
	/**
	 * Retorna o id da instancia atual. Este id pode ser usado para recupera-la posteriormente.
	 * 
	 * @return Id desta instancia
	 */
	public long getInstanceId();
	
	/**
	 * Salva o contexto
	 */
	public void save();
}
